昨天討論了前後端對資料格式在處理上的偏好,主要以最常見的 JSON 為範例,今天則想進一步整理 GET 與 POST 請求中可能使用的 Content-Type
,並進一步討論 JSON 和 FormData 格式的適用情境與限制。
Content-Type
是一個 HTTP 標頭(header),用來告訴伺服器或瀏覽器在 HTTP 請求或回應中所傳遞的資料格式。它讓接收端知道如何解析和處理這些資料,以下會分別介紹 GET 與 POST 的 Content-Type:
GET 請求主要用於從伺服器獲取資料,通常不包含正文(body),因此資料格式較為簡單(其實可以設置 body,但瀏覽器會忽略掉)。
?key1=value1&key2=value2
https://example.com/api/users?name=Alice&age=25
/resource/{id}
https://example.com/api/users/12345
POST 通常用於向伺服器發送資料,例如提交表單或創建新資源。在 POST 請求中,資料通常包含在請求的 body 中,因此可以使用更靈活的資料格式,有著以下幾種形式:
application/json
multipart/form-data
application/x-www-form-urlencoded
application/xml
text/plain
, application/octet-stream
接下來,我們主要介紹 JSON 和 FormData 這兩種格式~
JSON(JavaScript Object Notation)是一種輕量級的資料交換格式(為什麼說他輕量可以閱讀參考資料第一篇),易於人類閱讀和書寫,也易於機器解析和生成。前後端之間的 API 溝通多以 JSON 作為主要格式,這是因為 JSON 具有以下幾個優點:
範例:
{
"id": 1,
"name": "Alice",
"email": "alice@example.com"
}
注意事項:
當前端需要上傳檔案(如圖片或影片)到伺服器時,FormData 是一個理想的選擇。
範例:
const formData = new FormData();
formData.append('username', 'Alice');
formData.append('profile_picture', fileInput.files[0]);
FormData 是一種 Key-Value 結構,專門用來表示多部分表單資料,說他是「多部分(multipart)」是因為有這以下特點:
使用 multipart/form-data
作為 Content-Type
標頭來告訴伺服器,這個請求包含多個不同部分的資料。
此時請求的內容會被組織成以下形式:
--boundary
Content-Disposition: form-data; name="username"
Alice
--boundary
Content-Disposition: form-data; name="profile_picture"; filename="profile.jpg"
Content-Type: image/jpeg
(binary data of the image)
--boundary--
FormData 的 Payload: